<?php
class mobileverify {
	
	private $expire=180;// 验证码过期时间（s）
	
	//private $code_length=6;// 验证码位数
	
	private $reset=true; // 验证成功后是否重置
	
	private $seKey='3u8';//加密字符串
	
	private $key;
	
    /**
     * 架构方法 设置参数
     * @access public     
     * @param  array $config 配置参数
     */    
    public function __construct($mobile,$id=""){
        $this->key   =  $this->authcode($mobile).$id;
        //$this->key   =  $mobile.$id;
    }

    /**
     * 验证验证码是否正确
     * @access public
     * @param string $code 用户验证码
     * @param string $id 验证码标识     
     * @return bool 用户验证码是否正确
     */
    public function check($code) {
        // 验证码不能为空
        $secode = $_SESSION[$this->key];
        
        if(empty($code) || empty($secode)) {
            return false;
        }
        // session 过期
        if(NOW - $secode['verify_time'] > $this->expire) {
            $_SESSION[$this->key]=null;
            return false;
        }

        if($code == $secode['verify_code']) {
            $this->reset &&$_SESSION[$this->key]=null;
            return true;
        }
        return false;
    }
    
    
    /**
     * 生成手机验证码
     * @param 手机号 $mobile
     *  @param 数据ID $id
     * @param 验证码有效期 $expire
     */
    function make_verify(){
    	if(empty($_SESSION[$this->key])||NOW- $_SESSION[$this->key]['verify_time'] > $this->expire)//如果没有或者验证码已过期，则重新生成
    	{
    		$code['verify_time']	=NOW;
    		$code['verify_code']=mt_rand(100001,999999);
    		$_SESSION[$this->key]=$code;
    	}
    	return $_SESSION[$this->key];
    }

    /* 加密验证码 */
    private function authcode($str){
        $key = substr(md5($this->seKey), 5, 8);
        $str = substr(md5($str), 8, 10);
        return md5($key . $str);
    }

}